跳到主要内容

logrotate配置

logrotate配置地址

你上面提到的第4点建议, 生产级的logrotate配置如何使用(AI答复)

针对Java应用日志的生产级logrotate配置,可以实现日志自动轮转、压缩、过期清理,避免日志文件过大占用磁盘空间。以下是针对你的support-service应用的完整配置方案:

1. 创建logrotate配置文件

/etc/logrotate.d/目录下创建服务专属配置文件(以服务名命名,便于维护):

sudo vim /etc/logrotate.d/support-service

2. 生产级配置内容

添加以下配置(针对/var/log/support-service/目录下的日志):

3. 配置项说明(核心参数)

配置项作用说明
daily每天自动轮转日志(结合size参数,达到100MB时会提前轮转)
rotate 30保留30份轮转日志(超过后自动删除最旧的,避免磁盘占满)
size 100M单日志文件达到100MB时强制轮转(防止超大日志文件无法打开)
compress旧日志自动用gzip压缩(压缩率约70%,显著节省空间)
delaycompress当天的旧日志不压缩(方便临时查看,第二天再压缩)
create 0640 www www轮转后创建新日志文件,权限为640,属主/属组为www(与应用一致)
postrotate轮转后执行的脚本:向Java进程发送USR1信号,通知应用切换到新日志文件

4. 关键注意事项(避免日志丢失)

  • Java应用日志切换支持
    大部分Java日志框架(如Logback、Log4j2)默认支持USR1信号触发日志重新加载,无需重启应用。如果应用不支持,可改用copytruncate(但可能丢失少量日志):

    # 替代postrotate的方案(适合不支持USR1信号的应用)
    copytruncate # 先复制日志内容到备份文件,再清空原文件(可能丢失复制期间的日志)
  • 权限一致性
    create参数需与应用运行的用户(www)一致,否则应用可能没有权限写入新日志文件。

  • 测试配置有效性
    配置后执行以下命令测试(不会实际轮转,仅输出执行计划):

    sudo logrotate -d /etc/logrotate.d/support-service

    手动触发一次轮转(用于验证):

    sudo logrotate -f /etc/logrotate.d/support-service

5. 日常维护

  • 定期检查/var/log/support-service/目录,确认日志是否正常轮转、压缩。
  • 根据磁盘空间和日志量,调整rotate(保留天数)和size(触发阈值)。
  • 若需归档长期日志,可在prerotate中添加脚本,将日志同步到对象存储(如S3、OSS)。

通过这套配置,既能保证日志完整可用,又能避免磁盘空间被无限制占用,符合生产环境的稳定性要求。